#include "StdAfx.h"
#include "DynamicData.h"
#include <memory.h>

DynamicData::_dynDat::_dynDat(const char* szVal):szVal(szVal)
{
}
DynamicData::_dynDat::_dynDat(int iVal):iVal(iVal)
{
}
DynamicData::_dynDat::_dynDat(Vloat dVal):dVal(dVal)
{
}
DynamicData::_dynDat::_dynDat(void* pVal):pVal(pVal)
{
}
DynamicData::_dynDat::_dynDat(DynamicData* aVal):arr(aVal)
{
}
DynamicData::_dynDat::_dynDat(Vunction pfnVal):pfn(pfnVal)
{
}
DynamicData::_dynDat::_dynDat(const _dynDat& cpyVal)
{
	memcpy(this, &cpyVal, sizeof(_dynDat));
}

DynamicData::DynamicData(const char* const val):val(val), type(TYPE_STRING)
{
}

DynamicData::DynamicData(int val):val(val), type(TYPE_INT)
{
}

DynamicData::DynamicData(Vloat val):val(val), type(TYPE_FLOAT)
{

}

DynamicData::DynamicData(void* val):val(val), type(TYPE_POINTER)
{
}

DynamicData::DynamicData(Vunction val):val(val), type(TYPE_VUNCTION)
{
}

DynamicData::DynamicData():val(0x0), type(TYPE_NULL)
{
}

DynamicData::DynamicData(const DynamicData& valu):val(valu.val), type(valu.type)
{
	//printf("%fcopy ",val.dVal);
}

DynamicData::~DynamicData(void)
{
	if(type == TYPE_ARRAY)
		delete [] val.arr;
}

DynamicData::operator const char* () const
{
	VLARE_TYPECHECK(this, TYPE_STRING);
	return val.szVal;
}
DynamicData::operator int () const
{
	VLARE_TYPECHECK(this, TYPE_INT);
	return val.iVal;
}
DynamicData::operator Vloat () const
{
	VLARE_TYPECHECK(this, TYPE_FLOAT);
	return val.dVal;
}
DynamicData::operator void* () const
{
	VLARE_TYPECHECK(this, TYPE_POINTER);
	return val.pVal;
}
DynamicData::operator Vunction () const
{
	VLARE_TYPECHECK(this, TYPE_VUNCTION);
	return val.pfn;
}